package me.learningandroid.ch4_1.notificationdemo;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btnSimple = findViewById(R.id.btnSimple);
        Button btnWithIntent = findViewById(R.id.btnWithIntent);
        Button btnLong = findViewById(R.id.btnLong);
        Button btnImage = findViewById(R.id.btnImage);

        // 获取通知管理器
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        // SDK26 以上必须为通知创建通知渠道。
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            // SDK26 以上必须为通知创建通知渠道
            NotificationChannel channel = new NotificationChannel("1" /*id, 只需要包内唯一即可*/,
                    "sample_channel" /*APP用户可见的名称*/,
                    NotificationManager.IMPORTANCE_DEFAULT/*IMPORTANCE重要等级*/);
            // 通知管理器创建通知渠道
            notificationManager.createNotificationChannel(channel);
        }

        btnSimple.setOnClickListener(v -> {
            // 构建通知，设置重要级别，标题，文本，图标等
            Notification notification = new NotificationCompat.Builder(this /*context*/,
                                                                       "1" /*channelId*/)
                    .setContentTitle("这是一个短通知") // 标题
                    .setContentText("这是一个短通知这是一个短通知这是一个短通知这是一个短通知") // 内容，超出一行的内容将被截断
                    .setSmallIcon(R.drawable.ic_stat_name) // 状态栏中显示的小图标
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.webstorm)) // 下拉状态栏中显示的大图表（必须指定位图）
                    // `BitmapFactory.decodeResource`通过`resourceId`找到位图资源并转换成Bitmap。不能用于矢量图。
                    .build();
            // 发送通知
            notificationManager.notify(1,notification);
        });

        btnWithIntent.setOnClickListener(v -> {
            Notification notification = new NotificationCompat.Builder(this /*context*/,
                    "1" /*channelId*/)
                    .setContentTitle("这是一个带Intent的通知") // 标题
                    .setContentText("这是一个带Intent的通知") // 内容，超出一行的内容将被截断
                    .setContentIntent(PendingIntent.getActivity(this,0,new Intent(this, MainActivity.class),0))
                    .setAutoCancel(true) // 在状态栏点击后，自动隐藏消息
                    .setSmallIcon(R.drawable.ic_stat_name) // 状态栏中显示的小图标
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.webstorm)) // 下拉状态栏中显示的大图表
                    .build();
            notificationManager.notify(1,notification);
        });

        btnLong.setOnClickListener(v -> {
            Notification notification = new NotificationCompat.Builder(this /*context*/,
                    "1" /*channelId*/)
                    .setContentTitle("这是一个长通知") // 标题
                    .setStyle(new NotificationCompat.BigTextStyle().bigText("超长内容的通知超长内容的通知超长内容的通知超长内容的通知超长内容的通知超长内容的通知")) // 通过`setStyle`设置显示模式，`BigTextStyle`用于超长内容的消息
                    .setSmallIcon(R.drawable.ic_stat_name) // 状态栏中显示的小图标
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.webstorm)) // 下拉状态栏中显示的大图表
                    .build();
            notificationManager.notify(1,notification);
        });

        btnImage.setOnClickListener(v -> {
            Notification notification = new NotificationCompat.Builder(this /*context*/,
                    "1" /*channelId*/)
                    .setContentTitle("") // 标题
                    .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.webstorm))) // 通过`setStyle`设置显示模式，`BigPictureStyle`用于带图片的消息 （必须指定位图）
                    .setSmallIcon(R.drawable.ic_stat_name) // 状态栏中显示的小图标
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.webstorm)) // 下拉状态栏中显示的大图表
                    .build();
            notificationManager.notify(1,notification);
        });
    }
}